package dao;

import com.alibaba.fastjson.JSON;
import pojo.equip.EquipTypeEntity;
import utils.DataFileName;
import utils.DataUtils;
import utils.JsonUtil;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * @author Limohan
 */
public class EquipTypeDao {
    public void saveType(EquipTypeEntity type) {
        String json = JSON.toJSONString(type);
        try {
            DataUtils.writeData(DataFileName.EQUIPMENTTYPE.toString(), json);
        } catch (NullPointerException | IOException e) {
            e.printStackTrace();
        }
    }
    public List<EquipTypeEntity> findTypeList() throws IOException {
        String json = DataUtils.readData(DataFileName.EQUIPMENTTYPE.getName());
        if(json.length() == 0){
            return null;
        }
        List<EquipTypeEntity> equipTypeEntities = new ArrayList<>();
        String[] types = json.split("/");
        for(String str:types){
            EquipTypeEntity typeEntity = JsonUtil.jsonToObject(str,EquipTypeEntity.class);
            equipTypeEntities.add(typeEntity);
        }
        return equipTypeEntities;
    }
    public List<EquipTypeEntity> findTypeByName(String name)throws IOException{
        List<EquipTypeEntity> equipTypeEntities= findTypeList();
        List<EquipTypeEntity> equipTypeEntities1 = new ArrayList<>();
        if(equipTypeEntities!=null){
            for(EquipTypeEntity equipTypeEntity:equipTypeEntities){
                if(name.equals(equipTypeEntity.getName())){
                    equipTypeEntities1.add(equipTypeEntity);
                }
            }
            return equipTypeEntities1;
        }
        return null;

    }
    public String getMaxId() throws IOException {
        List<EquipTypeEntity> equipTypeEntities = findTypeList();
        int max = 0;
        if (equipTypeEntities == null || equipTypeEntities.size() == 0) {
            return "1";
        } else {
            for (EquipTypeEntity equipTypeEntity : equipTypeEntities) {
                if (Integer.parseInt(equipTypeEntity.getId()) > max) {
                    max = Integer.parseInt(equipTypeEntity.getId());
                }
            }
            return String.valueOf(max + 1);
        }
    }
    public void deleteType(String id) throws IOException {
        List<EquipTypeEntity> equipTypeEntities = findTypeList();
        if(equipTypeEntities==null) return;
        equipTypeEntities.removeIf(equipTypeEntity -> equipTypeEntity.getId().equals(id));
        DataUtils.clearData(DataFileName.EQUIPMENTTYPE.toString());
        for(EquipTypeEntity equipTypeEntity:equipTypeEntities){
            this.saveType(equipTypeEntity);
        }
    }
    public boolean isType(String Name) throws IOException {
        List<EquipTypeEntity> equipTypeEntities = findTypeList();
        if(equipTypeEntities!=null){
            for(EquipTypeEntity typeEntity:equipTypeEntities){
                if(Name.equals(typeEntity.getName())){
                    return true;
                }
            }
        }
        return false;
    }
    public EquipTypeEntity findType(String name) throws IOException {
        List<EquipTypeEntity>  equipTypeEntityList = findTypeList();
        if(equipTypeEntityList!=null){
            for(EquipTypeEntity equipTypeEntity:equipTypeEntityList){
                if(name.equals(equipTypeEntity.getName())){
                    return equipTypeEntity;
                }
            }
        }
        return null;
    }
    public void changeType(EquipTypeEntity equipTypeEntity,String newType) throws IOException {
        List<EquipTypeEntity> equipTypeEntityList = findTypeList();
        for(EquipTypeEntity equipTypeEntity1:equipTypeEntityList){
            if(equipTypeEntity.getId().equals(equipTypeEntity1.getId())){
                equipTypeEntity1.setName(newType);
            }
        }
        DataUtils.clearData(DataFileName.EQUIPMENTTYPE.toString());
        for(EquipTypeEntity typeEntity:equipTypeEntityList){
            this.saveType(typeEntity);
        }
    }
}
